package vip.liux.backend.application.service.pay;

import vip.liux.application.dots.PagedResultDto;
import vip.liux.backend.application.service.pay.dto.transfer.PayTransferCreateDto;
import vip.liux.backend.application.service.pay.dto.transfer.PayTransferDto;
import vip.liux.backend.application.service.pay.dto.transfer.PayTransferQueryDto;
import vip.liux.contracts.infrastructure.pay.dto.transfer.ClientPayTransferDto;

/**
 * 转账 Service 接口
 *
 * @author jason
 */
public interface PayTransferService {

    /**
     * 创建转账单，并发起转账
     *
     * @param input 创建请求
     * @return 转账单编号
     */
    PayTransferDto createTransfer(PayTransferCreateDto input);

    /**
     * 获取转账单
     *
     * @param id 转账单编号
     */
    PayTransferDto getTransfer(Long id);

    /**
     * 根据转账单号获取转账单
     *
     * @param no 转账单号
     * @return 转账单
     */
    PayTransferDto getTransferByNo(String no);

    /**
     * 获得转账单分页
     *
     * @param input 分页查询
     * @return 转账单分页
     */
    PagedResultDto<PayTransferDto> getTransferPage(PayTransferQueryDto input);

    /**
     * 同步渠道转账单状态
     *
     * @return 同步到状态的转账数量，包括转账成功、转账失败、转账中的
     */
    int syncTransfer();

    /**
     * 【单个】同步渠道转账单状态
     *
     * @param id 转账单编号
     */
    void syncTransfer(Long id);

    /**
     * 渠道的转账通知
     *
     * @param channelId 渠道编号
     * @param notify    通知
     */
    void notifyTransfer(Long channelId, ClientPayTransferDto notify);

}
